// 添上eslint
// npm i eslint 
    // eslint初始化
// npx eslint --init
// vscode中配置eslint 保存时修复


// console.log("hello");


// const a = 1;


// 找到用户的核心文件
// 1)要解析用户的参数
const program = require('commander');
const path = require("path")


const { version } = require("../package.json")


// 定义一个对象来存各种命令所需要的属性
const mapActions = {
    create: {
        alias: 'c',
        description: 'creat a project',
        examples: [  // 使用示例
            'zhu-cli create <project-name>'
        ],
    },
    config: {
        alias: 'conf',
        description: 'config project variable',
        examples: [  // 使用示例
            'zhu-cli config set <k> <v>',
            'zhu-cli config get <k>'
        ],
    },
    "*": {
        alias: '',
        description: 'command not found',
        examples: [],
    }
}


// Object.keys()
Reflect.ownKeys(mapActions).forEach((action) => {  // action拿到的就是mapActions的key 
    program
        .command(action)  // 命令的名字
        .alias(mapActions[action].alias)  // 别名
        .description(mapActions[action].description)  // 命令对应的描述
        .action(() => {
            
            if(action == '*'){
                console.log(mapActions[action].description)
            }else{
                // console.log(action);
                // 让不同的命令对应不同的文件, 拿到的为函数，直接执行
                // 
                require(path.resolve(__dirname, action))(...process.argv.slice(3));
            }
        });
});


// 监听--help事件
program.on("--help", () =>{
    console.log("\nExamples:")
    Reflect.ownKeys(mapActions).forEach((action) => {
        mapActions[action].examples.forEach((example) => {
            console.log(`  ${example}`);
        })
    })
})

// Usage: www [options] [command]

// Options:
//   -V, --version  output the version number
//   -h, --help     output usage information

// Commands:
//   create|c       creat a project
//   config|conf    config project variable
//   *              command not found

// Examples:
//   zhu-cli create <project-name>
//   zhu-cli config set <k> <v>
//   zhu-cli config get <k></k>





// vue create projectname

// program
// .command('create')  // 命令的名字
// .alias('c')  // 别名
// .description('create a project')  // 命令对应的描述
// .action(() => {
//     console.log("create");
// });



// 解析用户传递过来的参数(用户在命令行输入的)
// console.log(process.argv)
// [
//     'C:\\Program Files\\nodejs\\node.exe',
//     'C:\\Program Files\\nodejs\\node_modules\\zhu_cli\\bin\\www.js',
//     'create',
//     'my-project'
//  ]



// program.version('1.0.0').parse(process.argv);
// 希望能动态绑定版本
program.version(version).parse(process.argv);

// 再zhu-cli --help
// 就出现
// Usage: www [options]

// Options:
//   -V, --version  output the version number
//   -h, --help     output usage information

// zhu-cli --version
// 1.0.0






